package com.minsu.controller;

import com.minsu.entity.*;
import com.minsu.service.ProductionOrdersService;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Select;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Slf4j
@RestController
@RequestMapping("/number")
public class ProductionOrdersController {

    @Autowired
    private ProductionOrdersService productionOrdersService;

    /**
     * 查询所有的生成单号的信息
     */
    @GetMapping
    public Result findAll(
            @RequestParam(defaultValue = "1") Integer pageNum,
            @RequestParam(defaultValue = "10") Integer pageSize
    ) {
        log.info("分页查询生产订单信息，页码：{}，每页数量：{}", pageNum, pageSize);

        // 创建分页请求对象
        PageRequest pageRequest = new PageRequest();
        pageRequest.setPageNum(pageNum);
        pageRequest.setPageSize(pageSize);

        // 获取分页结果
        PageResult<ProductionOrder> pageResult = productionOrdersService.findAll(pageRequest);

        return Result.success(pageResult);
    }

//    @GetMapping
//    public Result findAll(@RequestParam(defaultValue = "1") Integer pageNum,
//                              @RequestParam(defaultValue = "10") Integer pageSize) {
//        log.info("查询所有的生成单号的信息，页码：{}，每页数量：{}", pageNum, pageSize);
//        List<ProductionOrder> productionOrdersServiceList = productionOrdersService.findAll(pageNum, pageSize);
//        return Result.success(productionOrdersServiceList);
//    }

    /**
     * 增加生成单号的信息
     */
    @PostMapping("/add")
    public Result add(@RequestBody ProductionOrder productionOrder) {
        try {
            log.info("开始添加生产订单，接收到的数据：{}", productionOrder);

            // 打印每个关键字段的值，用于调试
            log.info("生产单号: {}", productionOrder.getProductionOrderNo());
            log.info("入库时间: {}", productionOrder.getInTime());
            log.info("熔炼温度: {}", productionOrder.getMeltingTemperature());
            log.info("孕育剂添加量: {}", productionOrder.getInoculantAmount());
            log.info("浇注温度: {}", productionOrder.getPouringTemperature());
            log.info("产品合格率: {}", productionOrder.getQualificationRate());
            log.info("生产时间: {}", productionOrder.getProductionTime());

            // 基本数据验证
            if (productionOrder.getMeltingTemperature() == null) {
                return Result.error("熔炼温度不能为空");
            }
            if (productionOrder.getInoculantAmount() == null) {
                return Result.error("孕育剂添加量不能为空");
            }
            if (productionOrder.getPouringTemperature() == null) {
                return Result.error("浇注温度不能为空");
            }
            if (productionOrder.getQualificationRate() == null) {
                return Result.error("产品合格率不能为空");
            }


            productionOrdersService.add(productionOrder);
            log.info("生产订单添加成功");
            return Result.success();
        } catch (Exception e) {
            log.error("添加生产订单时发生错误", e);
            return Result.error("添加失败：" + e.getMessage());
        }
    }

    /**
     * 根据Id删除生成单号的信息
     */
    @DeleteMapping("/{orderId}")
    public Result delete(@PathVariable Integer orderId) {
        log.info("根据Id删除生成单号的信息,{}", orderId);
        productionOrdersService.deleteById(orderId);
        return Result.success();
    }

    /**
     * 根据Id查询的生成单号的信息
     */
    @GetMapping("/{orderId}")
    public Result findById(@PathVariable Integer orderId) {
        log.info("根据Id查询生成单号的信息,{}", orderId);
        ProductionOrder productionOrder = productionOrdersService.findById(orderId);
        return Result.success(productionOrder);
    }

    /**
     * 修改生成单号的信息
     */
    @PutMapping
    public Result update(@RequestBody ProductionOrder productionOrder) {
        log.info("修改生成单号的信息,{}", productionOrder);
        productionOrdersService.update(productionOrder);
        return Result.success();
    }

}
